package com.puissance4;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.service.ServiceMusique;

/**
 * Classe de gestion de l'activit� principale de l'application.
 * @author Michael
 */
public class MainActivity extends Activity implements OnClickListener {

	public static int _background = R.drawable.puissance4_mdpi;
	Intent music = new Intent();
	// Contexte de l'application
	private Context _contexteApplication = null;
	private boolean _estAttache = false;
	public ServiceMusique _serviceMusique = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		attacherService();
		
		music.setClass(this, ServiceMusique.class);
		 
		boolean musique = Options.ReadBoolean(this.getApplicationContext(), "bool_musique", true);
		
		if(musique){
			startService(music);
		} else {
			stopService(music);
		}
		 
		// Création de l'activité
		super.onCreate(savedInstanceState);
		
		// Définir la vue courante
		setContentView(R.layout.activity_main);
		
		// Initialisation de l'activité principale
		this.initialisation();
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Pas de menu pour l'instant
		// getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	/**
	 * Fonction d'initialisation au démarrage de l'application.
	 */
public void initialisation() {
		
	
	FileInputStream fIn = null; 
    InputStreamReader isr = null; 
    char[] inputBuffer = new char[255]; 

    try{ 
    	fIn = this.getApplicationContext().openFileInput("settings.dat");
        isr = new InputStreamReader(fIn);
        isr.read(inputBuffer);
    } 
    catch (Exception e) {       
    	FileOutputStream fOut = null; 
        OutputStreamWriter osw = null; 
 
        try{ 
 
            fOut = this.getApplicationContext().openFileOutput("settings.dat",MODE_APPEND);       
            osw = new OutputStreamWriter(fOut);
            osw.write("0;0"); 
            osw.flush(); 
          
            } 
            catch (Exception ee) {       
                    Toast.makeText(this.getApplicationContext(), "Settings not saved",Toast.LENGTH_SHORT).show(); 
            } 
    } 
		
		String resBackground = "";
		resBackground = Options.Read(this.getApplicationContext(), "pref_background");
		
		if(resBackground == "")
		{
			resBackground = "0";
		}
		int i = Integer.parseInt(resBackground); 
		
		switch (i)
		{
		case 1: 
			_background = R.drawable.puissance4_mdpi;
		break;
		case 2: 
			_background = R.drawable.tetedemort_mdpi;
		break;
		case 3: 
			_background = R.drawable.pokemon_mdpi;
		break;
		case 4: 
			_background = R.drawable.greenlanterne_mdpi;
		break;
		case 5: 
			_background = R.drawable.hellokitty_mdpi;
		break;
		case 6: 
			_background = R.drawable.mario_mdpi;
		break;
		default:
			_background = R.drawable.puissance4_mdpi;
		}
		
		LinearLayout ll = (LinearLayout) findViewById(R.id.activity_main);
		ll.setBackgroundResource(_background);
		
		// Sauvegarde du contexte de l'application
		_contexteApplication = this.getApplicationContext();
		
		// On acc��de aux ��l��ments de l'activit��
		Button button_nouvellePartie = (Button) findViewById(R.id._buttonNouvellePartie);
		Button button_scores = (Button) findViewById(R.id._buttonScores);
		Button button_options = (Button) findViewById(R.id._buttonOptions);
		Button button_credits = (Button) findViewById(R.id._buttonCredits);
		Button button_quitter = (Button) findViewById(R.id._buttonQuitter);

		// On initialise chaque ��l��ment
		if (button_nouvellePartie != null) {
			// On ajoute un listener sur le click du bouton
			button_nouvellePartie.setOnClickListener(this);
		}

		if (button_scores != null) {
			// On ajoute un listener sur le click du bouton
			button_scores.setOnClickListener(this);
		}

		if (button_options != null) {
			// On ajoute un listener sur le click du bouton
			button_options.setOnClickListener(this);
		}

		if (button_credits != null) {
			// On ajoute un listener sur le click du bouton
			button_credits.setOnClickListener(this);
		}

		if (button_quitter != null) {
			// On ajoute un listener sur le click du bouton
			button_quitter.setOnClickListener(this);
		}
		
	}

	/**
	 * Capter l'évènement Click sur la vue.
	 */
	public void onClick(View vue) {
		
		switch (vue.getId()) {
		
		case R.id._buttonNouvellePartie:
			// On démarre une nouvelle partie
			this.demarrerNouvellePartie();
			break;
			
		case R.id._buttonScores:
			// Afficher l'activité concernant les options
			this.demarrerScores();
			break;
			
		case R.id._buttonOptions:
			// Afficher l'activité concernant les options
			this.demarrerOptions();
			break;
			
		case R.id._buttonCredits:
			// Afficher l'activité concernant les crédits
			this.demarrerCredits();
			break;
			
		case R.id._buttonQuitter:
			// Quitter l'application
			this.quitterApplication();
			break;
			
		default:
			break;
			
		}
		
	}

	/**
	 * Démarrer l'activité nouvelle partie.
	 */
	private void demarrerNouvellePartie() {
		
		// Afficher l'activité NouvellePartie
		Intent intentNouvellePartie = new Intent(_contexteApplication, NouvellePartie.class);
		startActivity(intentNouvellePartie);
		// On termine cette activité
		finish();
		
	}

	/**
	 * Démarrer l'activité Scores.
	 */
	private void demarrerScores() {

		// Afficher l'activité Scores
		Intent intentScores = new Intent(_contexteApplication, Scores.class);
		startActivity(intentScores);
		// On termine cette activité
		finish();

	}

	/**
	 * Démarrer l'activité Options.
	 */
	private void demarrerOptions() {

		// Afficher l'activité Options
		Intent intentOptions = new Intent(_contexteApplication, Options.class);
		startActivity(intentOptions);
		// On termine cette activité
		finish();

	}

	/**
	 * Démarrer l'activité Credits.
	 */
	private void demarrerCredits() {

		// Afficher l'activité Credits
		Intent intentCredits = new Intent(_contexteApplication, Credits.class);
		startActivity(intentCredits);
		// On termine cette activité
		finish();

	}

	/**
	 * Le service de connexion.
	 */
	private ServiceConnection _serviceConnexion = new ServiceConnection() {

		public void onServiceConnected(ComponentName name, IBinder binder) {
			_serviceMusique = ((ServiceMusique.ServiceAttachement) binder).obtenirService();
		}

		public void onServiceDisconnected(ComponentName name) {
			_serviceMusique = null;
		}
		
	};

	/**
	 * Attacher le service de connexion.
	 */
	public void attacherService() {
		
		bindService(new Intent(this, ServiceMusique.class), _serviceConnexion, Context.BIND_AUTO_CREATE);
		_estAttache = true;
		
	}

	/**
	 * Détacher le service de connexion.
	 */
	public void detacherService() {
		
		if (_estAttache) {
			unbindService(_serviceConnexion);
			_estAttache = false;
		}
		
	}

	/**
	 * Quitter l'application.
	 */
	private void quitterApplication() {
		stopService(music);
		detacherService();
		finish();
	}
	/*
	@Override
	public void onPause() {
		stopService(music);
		detacherService();
	}
	
	@Override
	public void onResume() {
		attacherService();
		
		music.setClass(this, ServiceMusique.class);
		 
		boolean musique = Options.ReadBoolean(this.getApplicationContext(), "bool_musique", true);
		
		if(musique){
			startService(music);
		} else {
			stopService(music);
		}

	}*/ 

}
